package main

import (
	"fmt"
	"math/rand"
	"sync"
	"time"
)

var wg sync.WaitGroup

// 程序启动后会创建一个主goroutine去执行
func main() {
	for i := 0; i < 10; i++ {
		//go hello(i) // 开启一个单独的gorutin去执行hello函数任务 // 无序列表
		wg.Add(1)
		go f1(i)
		go func(i int) {
			fmt.Println(i) // 用的是函数参数的i， 不是外面的i
		}(i)
	}

	fmt.Println("main")
	go f()
	//time.Sleep(time.Second)
	wg.Wait() // 等待wg计数器减为0
	// main函数结束了 由main函数启动的goroutine也都结束了
}

func f() {
	rand.Seed(time.Now().UnixNano())
	for i := 0; i < 5; i++ {
		r1 := rand.Int()
		r2 := rand.Intn(10)
		fmt.Println(0-r1, 0-r2)
	}
}

func f1(i int) {
	time.Sleep(time.Second * time.Duration(rand.Intn(300)))
	fmt.Println(i)
	defer wg.Done()
}

func hello(i int) {

	fmt.Println("hello", i)
}
